import axios from './index'
import type { LoginRequest, RegisterRequest, ResetPasswordRequest, ResetEmailRequest, AuthResponse, ApiResponse, UserInfo } from '../types/auth'

/**
 * 用户登录
 * @param loginData 登录信息
 */
export const login = (loginData: LoginRequest): Promise<AuthResponse> => {
  return axios.post('api/auth/login', loginData)
}

/**
 * 用户注册
 * @param registerData 注册信息（只包含后端需要的字段：username, email, password）
 */
export const register = (registerData: {
  username: string;
  email: string;
  password: string;
}): Promise<AuthResponse> => {
  return axios.post('api/auth/register', registerData)
}

/**
 * 用户登出
 */
export const logout = (): Promise<ApiResponse<void>> => {
  return axios.post('api/auth/logout')
}

/**
 * 重置密码
 * @param token 重置密码令牌
 * @param password 新密码
 */
export const resetPassword = (token: string, password: string): Promise<ApiResponse<void>> => {
  return axios.post('api/auth/reset-password', {
    token,
    password
  })
}

/**
 * 发送重置密码邮件
 * @param email 用户邮箱
 */
export const sendResetPasswordEmail = (data: ResetEmailRequest): Promise<ApiResponse<void>> => {
  return axios.post('api/auth/send-reset-password-email', data)
}

/**
 * 获取当前用户信息
 */
export const getCurrentUser = (): Promise<AuthResponse> => {
  return axios.get('api/auth/me')
}

/**
 * 验证令牌是否有效
 */
export const validateToken = (token: string): Promise<ApiResponse<{ valid: boolean }>> => {
  return axios.post('api/auth/validate-token', { token })
}

/**
 * 刷新令牌
 */
export const refreshToken = (): Promise<ApiResponse<{ token: string }>> => {
  return axios.post('api/auth/refresh-token')
}

/**
 * 获取用户信息（通过指定token）
 * @param token 用户认证令牌
 */
export const getUserInfo = (token: string): Promise<ApiResponse<UserInfo>> => {
  return axios.post('api/auth/user', { token })
}

/**
 * 更新用户信息
 * @param userId 用户ID
 * @param userData 用户信息
 */
export const updateUserInfo = (userId: number | string, userData: Partial<UserInfo>): Promise<ApiResponse<UserInfo>> => {
  return axios.put(`api/auth/${userId}`, userData)
}

/**
 * 上传用户头像
 * @param file 头像文件
 * @param userId 用户ID（可选）
 */
export const uploadAvatar = (file: File, userId?: number | string): Promise<AuthResponse> => {
  const formData = new FormData()
  formData.append('file', file)
  
  // 如果提供了userId，添加到formData中
  if (userId) {
    formData.append('id', String(userId))
  }
  
  // 构建URL，使用标准API路径格式
  const url = 'api/auth/avatar'
  
  // 显式设置Content-Type为multipart/form-data，确保请求头正确
  return axios.post(url, formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 获取用户头像历史
 * @param userId 用户ID
 */
export const getUserAvatarHistory = (userId: number | string): Promise<ApiResponse<Array<{
  filename: string;
  fileUrl: string;
  createdAt: string;
  isActive: boolean;
}>>> => {
  return axios.get(`api/auth/${userId}/avatars`)
}

/**
 * 设置历史头像为当前头像
 * @param userId 用户ID
 * @param filename 头像文件名
 */
export const activateHistoryAvatar = (userId: number | string, filename: string): Promise<ApiResponse<string>> => {
  return axios.post(`api/auth/${userId}/avatars/activate`, { filename })
}

/**
 * 修改密码
 * @param oldPassword 原密码
 * @param newPassword 新密码
 */
export const changePassword = (oldPassword: string, newPassword: string): Promise<ApiResponse<void>> => {
  return axios.post('api/auth/password/change', {
    oldPassword,
    newPassword
  })
}

/**
 * 忘记密码发送重置邮件
 * @param email 用户邮箱
 */
export const forgotPassword = (email: string): Promise<ApiResponse<void>> => {
  return axios.post('api/auth/forgot-password', {
    email
  })
} 